package com.newtouch.bxzs.enterprise.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.newtouch.bxzs.enterprise.model.bo.*;
import com.newtouch.bxzs.enterprise.model.vo.*;

import java.util.List;

/**
 * 营销会议service类
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021年1月18日</td>
 * <td>Amour</td>
 * <td>Create</td>
 * </tr>
 * </table>
 * 
 * @author Amour
 * 
 * @version 1.0.0
 * @since 1.0.0
 */
public interface ConferenceService {
	/**
	 * 获取营销会议信息列表
	 * 
	 * @param conferenceVO
	 * @return
	 */
	IPage<ConferenceBO> getConferenceList(ConferenceVO conferenceVO);

	/**
	 * 获取营销会议详情
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param managerFlag
	 *            是否为管理岗
	 * @return
	 */
	ConferenceDetailBO getConferenceDetail(String conferenceId, Boolean managerFlag);

	/**
	 * 获取营销会议产品列表
	 * 
	 * @param conferenceProductVO
	 *            营销会议产品信息查询VO
	 * @return
	 */
	IPage<ConferenceActivityProductBO> getConferenceProduct(ConferenceProductVO conferenceProductVO);

	/**
	 * 查看营销会议客户信息
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param customerName
	 *            客户姓名
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getConferenceCustomerList(ConferenceCustomerVO conferenceCustomerVO);

	/**
	 * 添加营销会议个人客户
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param list
	 *            需要新增的营销会议客户信息
	 * @return
	 */
	Integer insertConferencePersonalCustomer(String conferenceId, Boolean personalFlag, List<CustomerDetailVO> list);

	/**
	 * 删除营销会议个人客户
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param customerId
	 *            客户ID
	 * @return
	 */
	Integer deleteConferencePersonalCustomer(String conferenceId, String customerId);

	/**
	 * 新增、修改营销会议信息
	 * 
	 * @param conferenceModifyVO
	 *            新增、修改营销会议信息VO
	 * @return
	 */
	String modifyConference(ConferenceModifyVO conferenceModifyVO);

	/**
	 * 
	 * 获取客户分配情况列表
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @param distributionFlag
	 *            是否查询已分配客户
	 * @param currentPage
	 *            起始页
	 * @param pageSize
	 *            每页数量
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getDistributionCustomerList(String conferenceId, Boolean distributionFlag,
			Integer currentPage, Integer pageSize);

	/**
	 * 保存分配客户信息
	 * 
	 * @param distributionCustomerVO
	 *            分配客户VO
	 * @return
	 */
	Integer modifyDistributionCustomer(DistributionCustomerVO distributionCustomerVO);

	/**
	 * 参会签到
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @param customerId
	 *            客户id
	 * @return
	 */
	Integer customerAttendance(String conferenceId, String customerId,String accetptionCustomerRecordId);


	/**
	 * 接收参会签到
	 *
	 * @param conferenceId
	 *            营销会议id
	 * @param customerId
	 *            客户id
	 * @return
	 */
	String acceptCustomerAttendance(String conferenceId, String customerId);

	/**
	 * 取消会议
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @return
	 */
	Integer cancelConference(String conferenceId);

	/**
	 * 删除营销会议
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @return
	 */
	Integer deleteConference(String conferenceId);

	/**
	 * 查询营销会议统计信息
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @return
	 */
	ConferenceActivityStatisticsBO getConferenceStatistics(String conferenceId);

	/**
	 * 接收营销会议信息
	 * 
	 * @param conferenceDetail
	 *            接收营销会议推送信息VO
	 * @return
	 */
	Integer acceptionConference(ConferenceAcceptionVO conferenceAcception);

	/**
	 * 查询营销会议本端用户信息
	 * 
	 * @param conferenceUserVO
	 *            营销会议用户信息查询VO
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getConferenceUser(ConferenceUserVO conferenceUserVO);

	/**
	 * 查询营销会议合作公司用户信息
	 * 
	 * @param conferenceUserVO
	 *            营销会议用户信息查询VO
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getConferenceCooperationUser(ConferenceUserVO conferenceUserVO);

	/**
	 * 参加营销会议
	 * 
	 * @param userId
	 *            用户ID
	 * @return
	 */
	Integer joinConference(String userId, String conferenceId);

	/**
	 * 电话联系客户
	 * 
	 * @param conferenceId
	 *            会议ID
	 * @param customer
	 *            客户信息
	 * @return
	 */
	Integer contactCustomer(String conferenceId, CustomerDetailVO customer);

	/**
	 * 推送客户
	 * 
	 * @param conferenceId
	 *            会议ID
	 * @param customer
	 *            客户信息
	 * @return
	 */
	String pushCustomer(String conferenceId, CustomerDetailVO customer);

}
